home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tex / macros / source / contrib / fp / defpattern.sty next >
Text File  |  1995-03-09  |  1KB  |  32 lines

  1. \NeedsTeXFormat{LaTeX2e}
  2. \ProvidesPackage{defpattern}[1994/10/12]
  3.  
  4. \message{%
  5.   `\string\defpattern-macro (adapted from \string\howto\space (Alan Jeffrey in TeX and TUG NEWS 2(2)))'%
  6. }
  7.  
  8. %define a macro \defpattern for defining ML-like pattern matching macros
  9. %adapted from the \howto-macro from tugboat
  10.  
  11. \def\xcs#1#2{\expandafter#1\csname#2\endcsname}
  12. \newcount\actioncount
  13. \def\defpattern#1[#2]#3{%
  14.   \xcs\ifx{\expandafter\gobble\string#1}\relax
  15.   \def#1{\erroraction#1}\fi
  16.   \advance\actioncount by 1\relax
  17.   \expandafter\defaction\expandafter{#1}{#3}{#2}%
  18.   \def\temp##1##2##3##4##5##6##7##8##9{\def\temp{[#2]}}%
  19.   \temp\empty\empty\empty\empty\empty\empty\empty\empty\empty
  20.   \edef#1{\noexpand\doaction\xcs\noexpand
  21.     {action-\the\actioncount}\temp}}
  22. \def\defaction#1#2#3{%
  23.   \xcs\def{action-\the\actioncount}##1[#3]{\applyto{#1}{#2}}}
  24. \def\gobble#1{}
  25. \def\applyto#1#2#3{#3{#1}{#2}}
  26. \def\doaction#1[#2][#3]{#1[#3]\success[#2]\failure[#3]}
  27. \def\success#1#2[#3]\failure[#4]{#2}
  28. \def\failure#1#2{#1}
  29. \def\erroraction#1[#2]{%
  30.    \errmessage{I don't know how to \string#1[#2]}}
  31.  
  32.